﻿#pragma once

#include <unordered_map>
#include <wrl/client.h>

#include "../../../Common/D3DUtil.h"
#include "../../../Common/d3dx12.h"

enum class PipelineStateType : int
{
    opaque = 0,
    transparent = 1,
    alphaTested = 2,
    markStencilMirrors = 3,
    drawStencilReflections = 4,
    treeSprites = 5,
    wavesRender = 6,
    wavesDisturb = 7,
    wavesUpdate = 8,
    vecAdd = 9,
    horzBlur = 10,
    vertBlur = 11
};

class PipelineStateManager
{
public:
    PipelineStateManager();
    ~PipelineStateManager() = default;
    
    static PipelineStateManager* GetManager();
protected:
    static  PipelineStateManager* mManager;

public:
    std::unordered_map<PipelineStateType, Microsoft::WRL::ComPtr<ID3D12PipelineState>> mPsos;
};
